// 文件名称: Student.java
// 创建日期: 2023-10-05
// 描述: 学生实体类，包含学生的各种属性及其对应的getter和setter方法。

package org.wisdom.studentchoose.db;

import javafx.beans.property.*;

/**
 * 学生实体类，包含学生的各种属性及其对应的getter和setter方法。
 */
public class Student {
    private SimpleIntegerProperty id;
    private StringProperty name;
    private StringProperty major;
    private StringProperty className;
    private StringProperty groupName;
    private StringProperty number;
    private SimpleDoubleProperty grade;
    private StringProperty gender;

    /**
     * 构造函数，初始化学生对象。
     *
     * @param id 学生ID
     * @param name 姓名
     * @param major 专业
     * @param className 班级名称
     * @param groupName 小组名称
     * @param number 学号
     * @param grade 成绩
     * @param gender 性别
     */
    public Student(int id, String name, String major, String className, String groupName, String number, double grade, String gender) {
        this.id = new SimpleIntegerProperty(id);
        this.name = new SimpleStringProperty(name);
        this.major = new SimpleStringProperty(major);
        this.className = new SimpleStringProperty(className);
        this.groupName = new SimpleStringProperty(groupName);
        this.number = new SimpleStringProperty(number);
        this.grade = new SimpleDoubleProperty(grade);
        this.gender = new SimpleStringProperty(gender);
    }

    /**
     * 另一个构造函数，未完全实现，可根据需要补充。
     *
     * @param id 学生ID
     * @param name 姓名
     * @param age 年龄
     * @param gender 性别
     * @param address 地址
     * @param email 邮箱
     * @param gpa 平均成绩
     */
    public Student(int id, String name, int age, String gender, String address, String email, double gpa) {
        // 这个构造函数没有被完全实现，可以根据需要补充
    }

    // Getters and Setters

    /**
     * 获取学生ID。
     *
     * @return 学生ID
     */
    public int getId() {
        return id.get();
    }

    /**
     * 设置学生ID。
     *
     * @param id 学生ID
     */
    public void setId(int id) {
        this.id.set(id);
    }

    /**
     * 获取学生ID的属性。
     *
     * @return 学生ID的属性
     */
    public SimpleIntegerProperty idProperty() {
        return id;
    }

    /**
     * 获取学生姓名。
     *
     * @return 学生姓名
     */
    public String getName() {
        return name.get();
    }

    /**
     * 设置学生姓名。
     *
     * @param name 学生姓名
     */
    public void setName(String name) {
        this.name.set(name);
    }

    /**
     * 获取学生姓名的属性。
     *
     * @return 学生姓名的属性
     */
    public SimpleStringProperty nameProperty() {
        return (SimpleStringProperty) name;
    }

    /**
     * 获取学生专业。
     *
     * @return 学生专业
     */
    public String getMajor() {
        return major.get();
    }

    /**
     * 设置学生专业。
     *
     * @param major 学生专业
     */
    public void setMajor(String major) {
        this.major.set(major);
    }

    /**
     * 获取学生专业的属性。
     *
     * @return 学生专业的属性
     */
    public SimpleStringProperty majorProperty() {
        return (SimpleStringProperty) major;
    }

    /**
     * 获取学生班级名称。
     *
     * @return 学生班级名称
     */
    public String getClassName() {
        return className.get();
    }

    /**
     * 设置学生班级名称。
     *
     * @param className 学生班级名称
     */
    public void setClassName(String className) {
        this.className.set(className);
    }

    /**
     * 获取学生班级名称的属性。
     *
     * @return 学生班级名称的属性
     */
    public SimpleStringProperty classNameProperty() {
        return (SimpleStringProperty) className;
    }

    /**
     * 获取学生小组名称。
     *
     * @return 学生小组名称
     */
    public String getGroupName() {
        return groupName.get();
    }

    /**
     * 设置学生小组名称。
     *
     * @param groupName 学生小组名称
     */
    public void setGroupName(String groupName) {
        this.groupName.set(groupName);
    }

    /**
     * 获取学生小组名称的属性。
     *
     * @return 学生小组名称的属性
     */
    public SimpleStringProperty groupNameProperty() {
        return (SimpleStringProperty) groupName;
    }

    /**
     * 获取学生学号。
     *
     * @return 学生学号
     */
    public String getStudentNumber() {
        return number.get();
    }

    /**
     * 获取学生学号的属性。
     *
     * @return 学生学号的属性
     */
    public SimpleStringProperty numberProperty() {
        return (SimpleStringProperty) number;
    }

    /**
     * 设置学生学号。
     *
     * @param studentNumber 学生学号
     */
    public void setStudentNumber(String studentNumber) {
        this.number.set(studentNumber);
    }

    /**
     * 获取学生成绩。
     *
     * @return 学生成绩
     */
    public double getGrade() {
        return grade.get();
    }

    /**
     * 获取学生成绩的属性。
     *
     * @return 学生成绩的属性
     */
    public DoubleProperty gradeProperty() {
        return grade;
    }

    /**
     * 设置学生成绩。
     *
     * @param grade 学生成绩
     */
    public void setGrade(double grade) {
        this.grade.set(grade);
    }

    /**
     * 获取学生性别。
     *
     * @return 学生性别
     */
    public String getGender() {
        return gender.get();
    }

    /**
     * 设置学生性别。
     *
     * @param gender 学生性别
     */
    public void setGender(String gender) {
        this.gender.set(gender);
    }

    /**
     * 获取学生性别的属性。
     *
     * @return 学生性别的属性
     */
    public SimpleStringProperty genderProperty() {
        return (SimpleStringProperty) gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id.get() +
                ", name='" + name.get() + '\'' +
                ", major='" + major.get() + '\'' +
                ", className='" + className.get() + '\'' +
                ", groupName='" + groupName.get() + '\'' +
                ", studentNumber='" + number.get() + '\'' +
                ", grade=" + grade.get() +
                ", gender='" + gender.get() + '\'' +
                '}';
    }
}
